package com.cskaoyan.javase._2inner._6lambda._2notice;

/**
 * Lambda表达式的细节问题/注意事项:
 *      1.Lambda表达式的方法引用,可以用一个已经存在的方法作为它的实现
 *          这个方法可以是自己写的,也可以是JDK源码中的,还可以是三方工具包中等.
 *          只要是已存在的方法都可以.
 *
 *      2.Lambda表达式是特殊的局部内部类,访问方法或者作用域内部的局部变量,该局部变量是常量
 *
 *      3.(重点)
 *      Lambda表达式语法中的大括号是重写父接口抽象方法的方法体
 *      在方法体中定义的变量是局部变量
 *      但是Lambda表达式的大括号没有自身独立的作用域
 *      而是和装Lambda表达式的作用域,共用一个作用域
 *
 *
 * @since 16:36
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {

        int a = 10;
        // println(String) 方法是一个成员方法 属于System.out
        System.out.println("hello world!");

        IA ia = System.out::println;
        ia.test("6666");

        IA ia2 = str -> {
            int b = 100;
            // Variable 'a' is already defined in the scope
            // int a = 100;
            // System.out.println(a);
            // System.out.println(a++);
        };
    }
}

// 反推出println(String) 方法的功能接口
@FunctionalInterface
interface IA {
    void test(String str);
}
